home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / snpd0492.zip / DAYNUM.C < prev    next >
C/C++ Source or Header  |  1992-04-13  |  1KB  |  56 lines

  1. /*
  2. **  DAYNUM.C - Functions to return statistics about a given date.
  3. **
  4. **  public domain by Bob Stout - uses Ray Gardner's SCALDATE.C
  5. */
  6.  
  7. long ymd_to_scalar (unsigned yr, unsigned mo, unsigned day);
  8. static long jan1date;
  9.  
  10. /*
  11. **  Return the day of the year (1 - 365/6)
  12. */
  13.  
  14. int daynum(int year, int month, int day)
  15. {
  16.       jan1date = ymd_to_scalar(year, 1, 1);
  17.       return (int)(ymd_to_scalar(year, month, day) - jan1date + 1L);
  18. }
  19.  
  20. /*
  21. **  Return the week of the year (1 - 52)
  22. */
  23.  
  24. int weeknum(int year, int month, int day)
  25. {
  26.       int dn = daynum(year, month, day);
  27.  
  28.       dn += (int)(jan1date % 7L) - 1;
  29.       return(1 + (dn / 7));
  30. }
  31.  
  32. #ifdef TEST
  33.  
  34. #include <stdio.h>
  35. void do_err(void);
  36.  
  37. void main(int argc, char *argv[])
  38. {
  39.       int day, month, year;
  40.  
  41.       if (4 > argc)
  42.       {
  43.             puts("Usage: DAYNUM month day year");
  44.             return;
  45.       }
  46.  
  47.       month = atoi(argv[1]);
  48.       day   = atoi(argv[2]);
  49.       year  = atoi(argv[3]);
  50.  
  51.       printf("%d/%d/%d is day #%d in week %d\n", month, day, year,
  52.             daynum(year, month, day), weeknum(year, month, day));
  53. }
  54.  
  55. #endif /* TEST */
  56.